<?php
require_once '../dz_framework/init.php';
//ini_set("display_errors","On");
//error_reporting(E_ALL);

class load_common_menu{
    public function add_frontend($pre='') {
        //获取前台 source/module下所有文件
        $dir_base = SITE_ROOT.'source/class';
        $dir = SITE_ROOT.'source/module';
        $module_files = scandir($dir);
        $module_files_class = array();
        foreach($module_files AS $key => $value){
            if($key != '.' && $key != '..'){
                $module_files_class[$value] =  scandir($dir.'/'.$value);
            }
        }
        unset($module_files_class['.']);
        unset($module_files_class['..']);
        unset($module_files_class['admin']);
        unset($module_files_class['ajax']);
        unset($module_files_class['upload']);
        $module_files_class['upload'] = array(
            'upload_main.php'
        );
        unset($module_files_class['upload']);
        $mod_action_do_array = array();
        //DEBUG 遍历模块 取出所有功能方法路由名称并插入 系统菜单表
        foreach($module_files_class AS $key => $value){
            foreach($value AS $k => $v){
                if(strpos($v,".php")){
                    //加载文件类 并获取类方法
                    include $dir_base.'/'.$key.'/'.$v;
                    include $dir.'/'.$key.'/'.$v;
                    $class_file_name = str_replace('.php', '', $v);
                    //获取类名称
                    $class_name = 'ctrl_'.$class_file_name;
                    //获取 mod 与 action 值
                    list($mod, $action) = explode('_', $class_file_name);
                    //获取所有方法名
                    $get_class_methods = get_class_methods($class_name);
                    //获取所有do_打头的方法名
                    foreach($get_class_methods AS $kk=>$vv){
                        //DEBUG 判断是否 do_ 起始的方法名
                        $do_name_pre = substr($vv, 0, 3);
                        if($do_name_pre=='do_'){
                            $do_name = substr($vv, 3);
                            $mod_action_do_array['frontend'][$mod][$action][$do_name]=$do_name;
                            //插入菜单数据库
                            $common_menu_data = array(
                                'menu_pid'=>3,//父级菜单 默认0
                                'cm_mod'=>$mod,//mod值
                                'cm_action'=>$action,//action值
                                'cm_do'=>$do_name,//do值
                                'position'=>$mod.'_'.$action.'_'.$do_name,//父级菜单 $mod.'_'.$action.'_'.$do_name 后台会有前缀 admin_
                                'sub_position'=>'',//自定义参数扩展 比如 URL 追加 sub_do = *
                                'name_var'=>$mod.'_'.$action.'_'.$do_name,//中文说明 没有默认和 postion 相同
                                'url'=>'index.php?mod='.$mod.'&action='.$action.'&do='.$do_name.'',//URL路径 动态网址路径 非静态 目录节点留空
                                'sort'=>0,//排序 默认 0
                                'self_style'=>0,//菜单自定义样式  class名称
                                'enable'=>1,//是否启用菜单 1 启用 0 不启用
                                'display_status'=>0,//是否显示菜单 有些菜单对用户开启 但不显示 应用与因此URL 异步请求路由
                                'related_menu_url'=>0,//相关菜单关联授权
                                'create_dateline'=>TIMESTAMP,//创建时间
                                'modify_dateline'=>TIMESTAMP,//修改时间
                                'isdelete'=>0//默认0 表示未删除 1 表示已删除
                            );
                            //DEBUG 判断position是否存在
                            $sql="SELECT menu_id FROM ".DB::table('common_menu')." WHERE position='".$mod.'_'.$action.'_'.$do_name."' LIMIT 1";
                            $check_exist = DB::result_first($sql);
                            if($check_exist){
                                @DB::update('common_menu', $common_menu_data, array('position'=>$mod.'_'.$action.'_'.$do_name));
                            }else{
                                @DB::insert('common_menu', $common_menu_data, true);
                            }
                        }
                    }
                    unset($get_class_methods);
                }
            }
        }
        return $mod_action_do_array;
    }
     
    public function add_backend($pre='') {
        //获取后台 source/module下所有文件
        $dir_base = SITE_ROOT.'admin/source/class';
        $dir = SITE_ROOT.'admin/source/module';
        $module_files = scandir($dir);
        $module_files_class = array();
        foreach($module_files AS $key => $value){
            if($key != '.' && $key != '..'){
                $module_files_class[$value] =  scandir($dir.'/'.$value);
            }
        }
        unset($module_files_class['.']);
        unset($module_files_class['..']);
        unset($module_files_class['tools']);
        unset($module_files_class['server']);
        unset($module_files_class['index']);
        unset($module_files_class['common']);
        //DEBUG 遍历模块 取出所有功能方法路由名称并插入 系统菜单表
        foreach($module_files_class AS $key => $value){
            foreach($value AS $k => $v){
                if(strpos($v,".php")){
                    //加载文件类 并获取类方法
                    include $dir_base.'/'.$key.'/'.$v;
                    include $dir.'/'.$key.'/'.$v;
                    $class_file_name = str_replace('.php', '', $v);
                    //获取类名称
                    $class_name = 'ctrl_'.$class_file_name;
                    //获取 mod 与 action 值
                    list($mod, $action) = explode('_', $class_file_name);
                    //获取所有方法名
                    $get_class_methods = get_class_methods($class_name);
                    //获取所有do_打头的方法名
                    foreach($get_class_methods AS $kk=>$vv){
                        //DEBUG 判断是否 do_ 起始的方法名
                        $do_name_pre = substr($vv, 0, 3);
                        if($do_name_pre=='do_'){
                            $do_name = substr($vv, 3);
                            $mod_action_do_array['backend'][$mod][$action][$do_name]=$do_name;
                            //插入菜单数据库
                            $common_menu_data = array(
                                'menu_pid'=>2,//父级菜单 默认0
                                'cm_mod'=>$mod,//mod值
                                'cm_action'=>$action,//action值
                                'cm_do'=>$do_name,//do值
                                'position'=>'admin_'.$mod.'_'.$action.'_'.$do_name,//父级菜单 $mod.'_'.$action.'_'.$do_name 后台会有前缀 admin_
                                'sub_position'=>'',//自定义参数扩展 比如 URL 追加 sub_do = *
                                'name_var'=>$mod.'_'.$action.'_'.$do_name,//中文说明 没有默认和 postion 相同
                                'url'=>'admin/index.php?mod='.$mod.'&action='.$action.'&do='.$do_name.'',//URL路径 动态网址路径 非静态 目录节点留空
                                'sort'=>0,//排序 默认 0
                                'self_style'=>0,//菜单自定义样式  class名称
                                'enable'=>0,//是否启用菜单
                                'display_status'=>0,//是否显示菜单 有些菜单对用户开启 但不显示 应用与因此URL 异步请求路由
                                'related_menu_url'=>0,//相关菜单关联授权
                                'create_dateline'=>TIMESTAMP,//创建时间
                                'modify_dateline'=>TIMESTAMP,//修改时间
                                'isdelete'=>0//默认0 表示未删除 1 表示已删除
                            );
                            //DEBUG 判断position是否存在
                            $sql="SELECT menu_id FROM ".DB::table('common_menu')." WHERE position='admin_".$mod.'_'.$action.'_'.$do_name."' LIMIT 1";
                            $check_exist = DB::result_first($sql);
                            if($check_exist){
                                @DB::update('common_menu', $common_menu_data, array('position'=>"admin_".$mod.'_'.$action.'_'.$do_name));
                            }else{
                                @DB::insert('common_menu', $common_menu_data, true);
                            }
                        }
                    }
                    unset($get_class_methods);
                }
            }
        }
        return $mod_action_do_array;
    }
}

$obj = new load_common_menu();
//$a = $obj->add_frontend();
//print_r($a);
//$b = $obj->add_backend();
//print_r($b);
$cname = array('setting','template','server_node');
//$cname = array('setting');
updatecache($cname);
//print_r($_G['setting']);
echo 'OK';
print_r($mod_action_do_array);

